package com.appspot.to5t3.server;

import java.util.ArrayList;

import com.appspot.to5t3.server.authorization.Authorization;
import com.appspot.to5t3.shared.UserRoleType;
import com.google.appengine.api.users.UserService;
import com.google.appengine.api.users.UserServiceFactory;

/**
 * 
 * @author alex.jongman
 * Klasse die bestemd is als een soort interface tussen de jsp en de domain klassen
 * 
 */
public class GuiAPI {
	
	private DomainKlasse dkl;
	private Authorization auth;
	
	/**
	 * Initializes GUIAPI which will be used to create instance of InitializeUsers and
	 * creating demo data by calling createUsers
	 */
	public GuiAPI()
	{
		InitializeUsers iusers = new InitializeUsers();
		iusers.createUsers();
		dkl = new DomainKlasse();
		auth = new Authorization();
	}
	
	/**
	 * Geeft het email adres van de gebruiker die op het moment is ingelogged.
	 * @return email adres van de gebruiker die op dit moment is ingelogged.
	 */
	public String getEmailAdres() {
		String result = "";
		
		UserService userService = UserServiceFactory.getUserService();
		if (userService.isUserLoggedIn()) {
			result = "<b>"+userService.getCurrentUser().getEmail()+"</b>";
		}
		return result;
	}
	
	/**
	 * Maakt gebruik van het model (DomeinKlasse) om de juiste autorisatietekst te retourneren.
	 * @return docenttekst voor niet geautoriseerde gebruiker.
	 */
	public String getDocentTextWithoutAuthorization() {
		return dkl.getDocentText();
	}
	
	/**
	 * Maakt gebruik van het model (DomeinKlasse) om de juiste autorisatietekst te retourneren.
	 * @return studenttekst voor niet geautoriseerde gebruiker.
	 */
	public String getStudentTextWithoutAuthorization() {
		return dkl.getStudentText();
	}

	/**
	 * Maakt gebruik van het model (DomeinKlasse) om de juiste autorisatietekst te retourneren.
	 * @return docentenstudenttekst voor niet geautoriseerde gebruiker.
	 */
	public String getDocentAndStudentTextWithoutAuthorization() {
		return dkl.getDocentAndStudentText();
	}
	
	/**
	 * Maakt gebruik van het model (DomeinKlasse) en Authorization om de juiste autorisatietekst te retourneren.
	 * @return docenttekst voor (niet)geautoriseerde gebruiker.
	 */
	public String getDocentTextWithAuthorization() {
		String result = "Je beschikt niet over voldoende rechten.";
		ArrayList<UserRoleType> acl = new ArrayList<UserRoleType>();
		acl.add(UserRoleType.DOCENT);
		if (auth.isAuthorized(acl, null))
			result = dkl.getDocentText();
		return result;
	}
	
	public String getMastertTextWithAuthorization() {
		String result = "Je beschikt niet over voldoende rechten.";
		ArrayList<UserRoleType> acl = new ArrayList<UserRoleType>();
		acl.add(UserRoleType.MASTER);
		if (auth.isAuthorized(acl, null))
			result = dkl.getMasterText();
		return result;
	}

	/**
	 * Maakt gebruik van het model (DomeinKlasse) en Authorization om de juiste autorisatietekst te retourneren.
	 * @return studenttekst voor (niet)geautoriseerde gebruiker.
	 */
	public String getStudentTextWithAuthorization() {
		String result = "Je beschikt niet over voldoende rechten.";
		ArrayList<UserRoleType> acl = new ArrayList<UserRoleType>();
		acl.add(UserRoleType.STUDENT);
		if (auth.isAuthorized(acl, null))
			result = dkl.getStudentText();
		return result;
	}

	/**
	 * Maakt gebruik van het model (DomeinKlasse) en Authorization om de juiste autorisatietekst te retourneren.
	 * @return docentenstudenttekst voor (niet)geautoriseerde gebruiker.
	 */
	public String getDocentAndStudentTextWithAuthorization() {
		String result = "Je beschikt niet over voldoende rechten.";
		ArrayList<UserRoleType> acl = new ArrayList<UserRoleType>();
		acl.add(UserRoleType.DOCENT);
		acl.add(UserRoleType.STUDENT);
		acl.add(UserRoleType.MASTER);
		if (auth.isAuthorized(acl, null))
			result = dkl.getDocentAndStudentText();
		return result;
	}
	
	/**
	 * Genereert een URL naar de destinationURL via de logout pagina van de OpenID provider
	 * @param destinationURL pagina die na het uitloggen getoond dient te worden 
	 * @return een URL naar de destinationURL via die de gebruiker uitgelogged wordt.
	 */
	public String getLogoutURL(String destinationURL) {
		UserService userService = UserServiceFactory.getUserService();
		return userService.createLogoutURL(destinationURL);
	}

}
